﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Linq.Expressions;
using System.ComponentModel;

namespace MVVMFramework.Core.Model
{
    public interface IDomainModel : IDisposable
    {
        void RejectChanges();
        ISubmitOperation SaveChanges();
        ISubmitOperation SaveChanges(Action<ISubmitOperation> callback, object userState);

        IDomainQuery<T> GetQuery<T>();

        void Add<T>(T entity);
        void Remove<T>(T entity);
        void Attach<T>(T entity);
        void Detach<T>(T entity);

        bool HasChanges { get; }
        bool IsSubmitting { get; }
        bool IsLoading { get; }
    }
}
